﻿using System;
using System.Collections.Generic;
using System.Text;
using System.Collections;
using CapaDatos;

namespace CapaNegocio 
{
    public class Constructor : IBaseDeDatos
    {
        #region atributos
        private int codigo;
        private TipoDoc tipoDoc;
        private String nroDoc;
        private String nombre;
        private String apellido;
        private String mail;
        private String celular;
        #endregion

        #region getters y setters

        public TipoDoc TipoDoc
        {
            get { return tipoDoc; }
            set { tipoDoc = value; }
        }

        public String NroDoc
        {
            get { return nroDoc; }
            set { nroDoc = value; }
        }

        public int Codigo
        {
            get { return codigo; }
            set { codigo = value; }
        }

        public String Nombre
        {
            get { return nombre; }
            set { nombre = value; }
        }

        public String Apellido
        {
            get { return apellido; }
            set { apellido = value; }
        }


        public String Email
        {
            get { return mail; }
            set { mail = value; }
        }


        public String Celular
        {
            get { return celular; }
            set { celular = value; }
        }

        public String TextoAMostrar
        {
            get { return textoAMostrar(); }
       
        }

        public string TipoYNumDoc {
            get { return tipoYNum(); } 
        }

        #endregion 

        #region clientes
       
        public Constructor(){
            nroDoc = "";
            nombre = "";
            apellido = "";
            mail = "";
            celular = "";
        }

        #endregion

        #region metodos estaticos
        public static bool crearConstructor(ArrayList datos)
        {
            return ServidorDatos.registrarConstructor(datos);
        }
        public static Constructor buscarConstructor(String pDni)
        {

            ArrayList constructor = ServidorDatos.buscarConstructor(pDni);
            if (constructor.Count == 1)
            {
                Constructor c = new Constructor();
                c.buildObject((ArrayList)constructor[0]);
                return c;
            }
            else
            {
                return null;
          }
        }
        public static Constructor buscarConstructor(int codigo)
        {

            ArrayList constructor = ServidorDatos.buscarConstructor(codigo);
            if (constructor.Count == 1)
            {
                Constructor c = new Constructor();
                c.buildObject((ArrayList)constructor[0]);
                return c;
            }
            else
            {
                return null;
            }

        }
        public static List<Constructor> buscarConstructoresLibres()
        {
            ArrayList otBD = ServidorDatos.buscarConstructoresLibres();
            List<Constructor> constructores = new List<Constructor>();
            for (int i = 0; i < otBD.Count; i++)
            {
                Constructor o = new Constructor();
                o.buildObject((ArrayList)otBD[i]);
                constructores.Add(o);
            }
            return constructores;


        }
        #endregion

        #region metodos de instancia
        public bool modificarConstructor(ArrayList datos)
        {
            return ServidorDatos.modificarConstructor(datos);
        }

        public bool eliminarConstructor(int pTipo, String pNroDoc)
        {
            return ServidorDatos.eliminarConstructor(pTipo, pNroDoc);
        }

        public bool eliminarConstructor()
        {
            return ServidorDatos.eliminarConstructor(this.tipoDoc.Codigo, this.nroDoc);
        }

        public string textoAMostrar()
        {
            return nroDoc+" - "+ nombre+", " + apellido;
        }

        public string tipoYNum()
        {
            return TipoDoc.Nombre + " - " + nroDoc;
        }
        #endregion

        #region IBaseDeDatos Members

        public void buildObject(ArrayList lista)
        {
            this.NroDoc = lista[0].ToString();
            this.nombre = lista[1].ToString();
            this.apellido = lista[2].ToString();
            this.mail = lista[3].ToString();
            this.Celular = lista[4].ToString();
            this.Codigo = Convert.ToInt32(lista[5]);
            this.TipoDoc = TipoDoc.buscarTipoDoc(Convert.ToInt32(lista[6]));
    
        }

        #endregion

        public override string ToString()
        {
            return nombre+", "+apellido;
        }


        public static Constructor buscarConstructor(int tipo, string nroDoc)
        {
            ArrayList constructor = ServidorDatos.buscarConstructor(tipo,nroDoc);
            if (constructor.Count == 1)
            {
                Constructor c = new Constructor();
                c.buildObject((ArrayList)constructor[0]);
                return c;
            }
            else
            {
                return null;
            }
        }

       

        public static List<Constructor> buscarConstructores()
        {
            ArrayList constructBD = ServidorDatos.buscarConstructores();
            List<Constructor> constructores = new List<Constructor>();
            for (int i = 0; i < constructBD.Count; i++)
            {
                Constructor o = new Constructor();
                o.buildObject((ArrayList)constructBD[i]);
                constructores.Add(o);
            }
            return constructores;
        }

        public static Constructor buscarConstructor(string pTipo, string pNro)
        {
            ArrayList constructor = ServidorDatos.buscarConstructor(pTipo, pNro);
            if (constructor.Count == 1)
            {
                Constructor c = new Constructor();
                c.buildObject((ArrayList)constructor[0]);
                return c;
            }
            else
            {
                return null;
            }
        }
    }
}
